﻿using System;
using System.Collections.Generic;
namespace ApiBetaSeries
{
    /// <summary>
    /// Interface of Show
    /// </summary>
    public interface IShow
    {
        /// <summary>
        /// Show's Title
        /// </summary>
        string Title { get; set; }
        /// <summary>
        /// Id on website thetvdb.com
        /// </summary>
        int Id_thetvdb { get; set; }
        /// <summary>
        /// url on betaseries api
        /// </summary>
        string Url { get; set; }
        /// <summary>
        /// show's description
        /// </summary>
        string Description { get; set; }
        /// <summary>
        /// Show's status (canceled, project...)
        /// </summary>
        ShowStatus Status { get; set; }
        /// <summary>
        /// Link to the show's banner (not download)
        /// </summary>
        string Banner { get; set; }
        /// <summary>
        /// Kind of show
        /// </summary>
        List<string> Genres { get; set; }
        /// <summary>
        /// List of episode number by season
        /// </summary>
        List<int> Seasons { get; set; }
        /// <summary>
        /// Show's banner
        /// </summary>
        System.Drawing.Bitmap BannerBitmap { get; }

        
        /* Methodes */
        /// <summary>
        /// Get all the season of a show
        /// </summary>
        /// <param name="token">Token of the user</param>
        /// <returns>List of seasons</returns>
        List<ISeason> GetSeasons(string token = null);

        /// <summary>
        /// Get all the season of a show
        /// </summary>
        /// <param name="user">the user</param>
        /// <returns>List of seasons</returns>
        List<ISeason> GetSeasons(IUser user);


        /// <summary>
        /// Get a specific season of a show
        /// </summary>
        /// <param name="number">Season number</param>
        /// <param name="token">Token of the user</param>
        /// <returns>the season</returns>
        ISeason GetSeason(int number, string token = null);

        /// <summary>
        /// Get a specific season of a show
        /// </summary>
        /// <param name="number">Season number</param>
        /// <param name="user">the user</param>
        /// <returns>the season</returns>
        ISeason GetSeason(int number, IUser user);

        /// <summary>
        /// Get a specific episode of a show
        /// This need a valid token
        /// </summary>
        /// <param name="seasonNumber">season of the episode</param>
        /// <param name="episodeNumber">episode number</param>
        /// <param name="token">Token of the user</param>
        /// <returns>the episode</returns>
        IEpisode GetEpisode(int seasonNumber, int episodeNumber, string token = null);

        /// <summary>
        /// Get the last subtitle of a show
        /// </summary>
        /// <param name="number">number of subtitles you want (between 0 and 100) </param>
        /// <param name="type">VO/VF/VOVF</param>
        /// <returns>list of subtitles</returns>
        List<ISubtitle> GetLastSubtitles(int number = 100, SubtitleLanguage type = SubtitleLanguage.VOVF);


        /// <summary>
        /// Get all the subtitles for a show
        /// </summary>
        /// <param name="type">VO/VF/VOVF</param>
        /// <returns>List of subtitles</returns>
        List<ISubtitle> GetSubtitles(SubtitleLanguage type = SubtitleLanguage.VOVF);

        /// <summary>
        /// Recommend this show to a friend
        /// </summary>
        /// <param name="user">identified member</param>
        /// <param name="friend">friend's username</param>
        void Recommend(IUser user, string friend);
        /// <summary>
        /// Recommend this show to a friend
        /// </summary>
        /// <param name="token">token of an identified member</param>
        /// <param name="friend">friend's username</param>
        void Recommend(string token, string friend);
    }
}
